#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
#include <string.h>
// 　头文件stdio.h包含了目录文件操作．
//  fopen,fprintf,fscanf,fseek,ftell,fwrite,fread，fclose
//  fprintf就跟printf类似，输出到文件。优点明文。
//  fopen打开目录文件
//  fseek配置文件中要操作的位置。
//  ftell当前操作的位置。
//  fwrite写入文件。
//  fread读文件。
//  fgets读一行，需要明文。
//  fclose 关闭文件。
// 　fflush 系统会将写入文件的数据放到内存缓存区，后面才会写入硬盘。如果要立即同步到硬盘的文件，用fflush。fflush(stdout);立即输出到终端。
// fgetc //从文件获取一个字符．　getc从终端获取一个字符．
// fputc 输出一个字符到文件，　putc输出字符到终端．
// remove 删除文件
// 　rename　文件重命名．
// popen　执行shell语句并返回命令打印数据．
// 　pclose

// fopen打开标志。
//  r
//  以只读方式打开文件，该文件必须存在。
//  r+
//  以读/写方式打开文件，该文件必须存在。
//  rb+
//  以读/写方式打开一个二进制文件，只允许读/写数据。
//  rt+
//  以读/写方式打开一个文本文件，允许读和写。
//  w
//  打开只写文件，若文件存在则文件长度清为零，即该文件内容会消失；若文件不存在则创建该文件。
//  w+
//  打开可读/写文件，若文件存在则文件长度清为零，即该文件内容会消失；若文件不存在则创建该文件。
//  a
//  以附加的方式打开只写文件。若文件不存在，则会创建该文件；如果文件存在，则写入的数据会被加到文件尾后，即文件原先的内容会被保留（EOF 符保留）。
//  a+
//  以附加方式打开可读/写的文件。若文件不存在，则会创建该文件，如果文件存在，则写入的数据会被加到文件尾后，即文件原先的内容会被保留（EOF符不保留）。
//  wb
//  以只写方式打开或新建一个二进制文件，只允许写数据。
//  wb+
//  以读/写方式打开或新建一个二进制文件，允许读和写。
//  wt+
//  以读/写方式打开或新建一个文本文件，允许读和写。
//  at+
//  以读/写方式打开一个文本文件，允许读或在文本末追加数据。
//  ab+
//  以读/写方式打开一个二进制文件，允许读或在文件末追加数据。

// printf其实也是输出到stdout文件．stdout就是我们的终端输出．
// 　scanf其实是从文件stdin输入，stdin就是我们的终端输入．
// perror 输出到stderr,默认也是终端．
// #define stdin stdin  系统自动打开，文件描述符时0
// #define stdout stdout 系统自动打开，文件描述符时1
// #define stderr stderr 系统自动打开，文件描述符时2

// 　文件ｗ或ｒ打开文件，操作文件的光标在0位置．
// 　a打开文件，操作文件的光标在末尾．
// 　如果需要修改文件的某一段数据，可以r+方式打开文件(因为ｗ会清空文件)，把光标指定到对应位置然后修改．但不能插入数据．．
//  一般我们是把文件数据先读取到内存，删添改操作完成，再写回去．

int main(void)
{
#define RESULT_BUFFER_SIZE 2048
    FILE *file;
    char resbuf[RESULT_BUFFER_SIZE];
    file = popen("df", "r");
    if (!file)
    {
        return -1;
    }
    fread(resbuf, 1, RESULT_BUFFER_SIZE, file);
    printf("resbuf:\n%s", resbuf);
    pclose(file);
    return 0;
}
